package com.fbs.wowo.manage.service;

import com.fbs.wowo.exception.NoSuchDataException;
import com.fbs.wowo.manage.entity.User;
import com.fbs.wowo.manage.entity.UserLogin;
import com.fbs.wowo.manage.vo.TokenVo;
import com.fbs.wowo.manage.vo.UserLoginVoPC;

import javax.validation.constraints.NotBlank;

/**
 * 登录模块
 */
public interface LoginService {
    /**
     * 手机验证码
     * 1.获取到手机号 根据手机号生成验证码 并发送短信到手机
     * * 1.1 老用户
     * * 1.2 新用户
     * 创建临时登录注册对象
     */
    UserLogin sendVerifyCodeLogin(@NotBlank String tel);

    /**
     * 手机注册
     *
     * 新用户注册
     * 2. 手机号和验证码一起发送后台，判断验证码是否输入正确，若不正确返回错误，若正确，判断是新用户还是老用户，
     *  （或将验证码返回，前端判断验证码输入是否正确？）
     *  * 2.1 老用户：跳转登录 临时对象转换为永久对象
     *  * 2.2 新用户：跳转注册
     *       * 2.2.1 判断邀请码是否有效
     *           * 2.2.1.1 有效 临时对象转换为永久对象
     *           * 2.2.1.2 无效 依然返回
     */
    UserLogin regMob(UserLogin record, String ip);
    /**
     * 手机登录
     *
     * 老用户登录 LoginVo
     */
    UserLogin loginMob(UserLogin record, String ip);

    /**
     * 按手机号查找用户
     * @param tel
     * @return
     */
    User findByTelAndValid(String tel);

    /**
     * 电脑注册
     * @param record
     * @param ip
     * @return
     */
    TokenVo regPC(UserLoginVoPC record, String ip);

    /**
     * 电脑登录
     * @param record
     * @param ip
     * @return
     */
    TokenVo loginPC(UserLoginVoPC record, String ip);

    /**
     * 忘记密码 重置密码
     * @param tel           手机号
     * @param verifyCode    验证码
     * @param newPassword   新密码
     * @throws NoSuchDataException
     */
    void forget(String tel, String verifyCode, String newPassword) throws NoSuchDataException;
}
